package com.bskms.controller;

import com.bskms.bean.Message;
import com.bskms.service.ChatService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 机器人小助手控制器
 * 
 * 功能说明：
 * 1. 智能问答：提供基于AI的智能对话功能
 * 2. 消息管理：处理用户消息的发送和接收
 * 3. 历史记录：保存和查询对话历史
 * 4. 页面跳转：提供聊天界面的访问入口
 * 
 * 设计思路：
 * - 采用RESTful API设计，支持页面跳转和API接口
 * - 集成通义千问AI服务，提供智能对话能力
 * - 使用@Controller注解同时支持页面跳转和JSON响应
 * - 通过依赖注入获取ChatService进行业务逻辑处理
 * - 支持消息的持久化存储和历史查询
 * 
 * 技术特点：
 * - 异步消息处理，提高用户体验
 * - 消息历史记录，支持对话连续性
 * - AI模型集成，提供智能回复
 * - 前后端分离，支持多种客户端
 * 
 * @author 系统开发者
 * @version 1.0
 * @since 2024
 */
@Controller // 使用@Controller注解，同时支持页面跳转和@ResponseBody（API）
@RequestMapping("/robot/helper")
public class ChatController {

    // 聊天服务接口，提供智能对话相关的业务逻辑处理
    private final ChatService chatService;

    /**
     * 构造函数，通过依赖注入初始化ChatService
     * 
     * @param chatService 聊天服务接口实现
     */
    public ChatController(ChatService chatService) {
        this.chatService = chatService;
    }

    /**
     * 跳转到智能问答页面
     * 
     * 功能说明：
     * - 提供机器人聊天界面的访问入口
     * - 返回用户聊天页面视图
     * - 支持用户与AI助手的交互
     * 
     * 实现逻辑：
     * 1. 接收GET请求，访问路径为 /robot/helper
     * 2. 直接返回聊天页面视图名称
     * 3. 前端页面会通过AJAX调用相关API接口
     * 
     * @return String 返回聊天页面视图名称 "user/robot"
     */
    @GetMapping
    public String showChatPage() {
        return "user/robot";
    }

    /**
     * 处理用户消息，返回机器人回复
     * 
     * 功能说明：
     * - 接收用户发送的消息
     * - 调用AI服务生成智能回复
     * - 保存对话记录到数据库
     * - 返回机器人的回复内容
     * 
     * 实现逻辑：
     * 1. 接收前端传递的用户消息（JSON格式）
     * 2. 调用chatService.sendMessage()方法处理消息
     * 3. 该方法内部会：
     *    - 保存用户消息到数据库
     *    - 调用通义千问API获取AI回复
     *    - 保存AI回复到数据库
     * 4. 返回AI生成的回复内容
     * 
     * @param userMessage 用户发送的消息内容（JSON字符串）
     * @return String AI生成的回复内容
     */

    @PostMapping("/send")
    @ResponseBody // 显式标记为API接口，返回纯文本
    public String sendMessage(@RequestBody String userMessage) {
        return chatService.sendMessage(userMessage);
    }

    /**
     * 获取历史消息记录
     * 
     * 功能说明：
     * - 查询用户与机器人的对话历史
     * - 支持对话的连续性和上下文理解
     * - 提供消息记录的查看功能
     * 
     * 实现逻辑：
     * 1. 调用chatService.getHistoryMessages()方法
     * 2. 该方法会查询数据库中的最新消息记录
     * 3. 返回包含用户消息和机器人回复的完整列表
     * 4. 前端可以根据需要展示历史对话
     * 
     * @return List<Message> 历史消息列表，包含用户和机器人的所有对话记录
     */
    @GetMapping("/history")
    @ResponseBody
    public List<Message> getHistoryMessages() {
        return chatService.getHistoryMessages();
    }
}